iT邦幫忙

2024 iThome 鐵人賽

DAY 12
0
自我挑戰組

PHP框架-Laravel自學挑戰系列 第 12

DAY 12 - 認識Laravel框架中的migration:資料庫結構管理

  • 分享至 

  • xImage
  •  

哈囉大家好~
昨天簡單地學習了如何透過Model和資料庫進行互動的語法(對資料庫中的數據進行增刪查改),
今天想要實際試試看連接Laravel專案還有本地的MySQL資料庫。
但在連接資料庫之前,要來認識Laravel專案中的另一個工具-migration。/images/emoticon/emoticon76.gif

Migration負責的是資料庫的管理,在Laravel專案中可以透過migration來定義以及修改資料庫中的表格與結構。有了migration,我們可以不用到PHP MyAdmin中創建或編輯資料庫的欄位、架構⋯⋯等。
也就是說,透過寫程式碼的方式,可以完成:資料表的建立與刪除、調整資料表的結構(對欄位做增刪修的處理)、以及最特別的,「資料庫的版本控制」!
不用擔心搞砸,隨時可以回到上一步或是前幾步的操作~

首先要練習創建migration之前,必須要先讓Laravel專案與資料庫連接。
Laravel框架有支援很多類型的資料庫,我用的是本地的MySQL資料庫進行測試。
在Laravel專案中可以找到一個env.檔案,這個檔案是Laravel用來管理專案的環境變數,
必須這這個檔案進行資料庫的設定。

DB_CONNECTION=mysql
DB_HOST=127.0.0.1 #server主機位置
DB_PORT=3306 #port 
DB_DATABASE=student #資料庫名稱
DB_USERNAME=root 
DB_PASSWORD=我的資料庫密碼

檔案中的DB_CONNECTION對應的是使用的資料庫,其他設定就依照想要連線的資料庫做設置。
其中DB_DATABASE是資料庫名稱,必須先建立好要連接的資料庫,不然Laravel會找不到連線位置。

接著利用artisan命令列來清除快取,確保Laravel加載最新的環境變數:

php artisan config:clear

接下來就可以來建立migration,我想要在student這個資料庫裡面建立info這個資料表,
資料表有學生id(auto increment),姓名,年紀,電話,興趣以及資料創建時間這6個欄位。
一樣先利用artisan命列來快速建立新的migration:

php artisan make:migration create_info_table

幾秒後就可以在database/migrations的目錄底下看到剛剛創建的migration!

下方則是migration檔裡面設置創建資料表與欄位的程式碼內容:

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void #當migration被執行時應如何建立資料表
    {
        Schema::create('info', function (Blueprint $table) { #創建table info
            $table->id(); #auto increment id
            $table->string('name'); 
            $table->integer('age'); 
            $table->string('phone', length: 20);
            $table->string('hobby', length: 100);
            $table->timestamps(); 
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void #定義如何還原這個migration
    {
        Schema::dropIfExists('info');
    }
};

up() function中創建了剛剛提到的六個欄位,搭配我希望對應欄位的儲存資料類型。
例如:姓名是string,電話也是string,但是有限制長度為20。官方文檔中還有提供很多資料類型讓開發者選擇,有興趣的邦友也可以到官網migrations這個類別看看喔!
down() function中則是定義如何刪除資料表或欄位,例如我想新增一個欄位「家長」,那我就創建一個新的migration:

#這裡指定要更動的資料表為“info"
php artisan make:migration add_parent_to_info_table --table=info

然後在對應的migration檔案的up() function裡面撰寫新增欄位的程式碼:

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::table('info', function (Blueprint $table) {
            $table->string('parent')->nullable(); 
            #新增parent欄位(資料型別string,允許空值)
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::table('info', function (Blueprint $table) {
            $table->dropColumn('parent'); #還原時,移除parent欄位
        });
    }
};

確認程式碼無誤之後,再次利用artisan命令列編輯資料表架構:

php artisan migrate

如果新增完欄位之後,發現不需要想要刪除該欄位,可以用artisan命令列回到上一步(也就是執行剛剛down()function裡面的內容!)

php artisan migrate:rollback

今天對於migration的簡單介紹就到這邊結束啦~
昨天的Model用來處理資料表中的數據,今天的Migration則是用來處理資料表與資料庫的架構!
兩個部分拼在一起看比較完整也比較好理解呢/images/emoticon/emoticon34.gif
那就明天再見囉 881~


上一篇
DAY11 - 與Laravel框架的Eloquent ORM初認識!
下一篇
DAY13 - Laravel Livewire 前端框架: 讓撰寫程式碼更容易!
系列文
PHP框架-Laravel自學挑戰30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言